home *** CD-ROM | disk | FTP | other *** search
- %
- % plotting.tex - TeX Plotting Macros
- %
- % author: Laurence G. Yaffe (lgy@newton.phys.washington.edu) 1987
- %
- \setbox0 = \hbox{$0$}%
- \newdimen \digitheight \digitheight = \ht0
- \newdimen \titlespacing \titlespacing = 1.5 ex
- \newdimen \labelspacing \labelspacing = 0.9 ex
- \newdimen \labelwidth \labelwidth = 0.0 pt
- \newdimen \ticklength \ticklength = 0.7 em
- \newdimen \plotheight \plotheight = 5.0 in
- \newdimen \plotwidth \plotwidth = 5.0 in
- \newdimen \linewidth \linewidth = 0.241 pt
- \newskip \padding \padding = 0pt plus 1fil
- %
- \newbox \xAxis
- \newbox \XAxis
- \newbox \yAxis
- \newbox \YAxis
- \newbox \PlotData
- \newbox \PlotBox
- %
- \def\ratio #1:#2% adjust padding for log scale plotting
- {%
- \count255 = #1#2
- \ifnum \count255=11 \global\padding = 0pt plus 1.00000 fil \else
- \ifnum \count255=12 \global\padding = 0pt plus 0.30103 fil \else
- \ifnum \count255=23 \global\padding = 0pt plus 0.17609 fil \else
- \ifnum \count255=34 \global\padding = 0pt plus 0.12494 fil \else
- \ifnum \count255=45 \global\padding = 0pt plus 0.09691 fil \else
- \ifnum \count255=56 \global\padding = 0pt plus 0.07918 fil \else
- \ifnum \count255=67 \global\padding = 0pt plus 0.06695 fil \else
- \ifnum \count255=78 \global\padding = 0pt plus 0.05799 fil \else
- \ifnum \count255=89 \global\padding = 0pt plus 0.05115 fil \else
- \ifnum \count255=91 \global\padding = 0pt plus 0.04576 fil \else
- \ifnum \count255=13 \global\padding = 0pt plus 0.47712 fil \else
- \ifnum \count255=14 \global\padding = 0pt plus 0.60206 fil \else
- \ifnum \count255=24 \global\padding = 0pt plus 0.30103 fil \else
- \ifnum \count255=25 \global\padding = 0pt plus 0.39794 fil \else
- \ifnum \count255=26 \global\padding = 0pt plus 0.47712 fil \else
- \ifnum \count255=36 \global\padding = 0pt plus 0.30103 fil \else
- \ifnum \count255=46 \global\padding = 0pt plus 0.17609 fil \else
- \ifnum \count255=61 \global\padding = 0pt plus 0.22185 fil \else
- \ifnum \count255=51 \global\padding = 0pt plus 0.30103 fil \else
- \ifnum \count255=41 \global\padding = 0pt plus 0.39794 fil \else
- \ifnum \count255=31 \global\padding = 0pt plus 0.52288 fil \else
- \ifnum \count255=21 \global\padding = 0pt plus 0.69897 fil \else
- \global\padding = 0pt
- \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
- }%
- %
- \def\centered #1{\vbox to 0pt {\vss \hbox to 0pt {\hss #1\hss}\vss}}%
- %
- \def\dash #1%
- {%
- \vbox {\hrule height 0.5 \linewidth depth 0.5 \linewidth width #1}%
- }%
- %
- \def\yaxis #1#2%
- {%
- \global\setbox \yAxis = \hbox
- {%
- \def \temp {#1}%
- \ifx \temp\empty \else
- \vbox to \plotheight {\vss \hbox {#1}\vss}%
- \kern 0.7 \titlespacing
- \fi
- \def \temp {#2}%
- \ifx \temp\empty \else
- \labelwidth = 0pt
- \setbox1=\box0\ytic #2,\cr,%
- \ifnum \labelwidth = 0 \kern -\labelspacing \fi
- \hbox to \labelwidth {\hfil}\box0%
- \fi
- \hbox to 0pt
- {\hss \vrule height \plotheight depth 0pt width \linewidth \hss}%
- }%
- }%
- \def\ytic #1,%
- {%
- \def \temp {#1}%
- \def \quit {\cr}%
- \ifx \temp\quit
- \let\next=\relax
- \setbox0 = \vbox to \plotheight {\unvbox0 \unskip}%
- \else
- \let\next=\ytic \skip0 = \padding
- \setbox1 = \hbox {\tenpoint $#1$}%
- \ifnum \labelwidth < \wd1
- \labelwidth = \wd1
- \fi
- \setbox1 = \hbox
- {%
- \smash
- {%
- \ifnum \wd1 = 0
- \kern \labelspacing
- \hbox to 0pt {\dash {0.67 \ticklength}\hss}%
- \else
- \lower 0.42 \digitheight \hbox to 0pt {\hss \unhbox1}%
- \kern \labelspacing
- \hbox to 0pt {\dash \ticklength \hss}%
- \fi
- }%
- }%
- \setbox0 = \vbox to \plotheight {\box1 \vskip \skip0 \unvbox0}%
- \fi
- \next
- }%
- %
- \def\Yaxis #1#2%
- {%
- \global\setbox \YAxis = \hbox
- {%
- \hbox to 0pt
- {\hss \vrule height \plotheight depth 0pt width \linewidth \hss}%
- \def \temp {#2}%
- \ifx \temp\empty \else \setbox1=\box0 \Ytic #2,\cr,\box0 \fi
- \def \temp {#1}%
- \ifx \temp\empty \else
- \kern 0.7 \titlespacing
- \vbox to \plotheight {\vss \hbox {#1}\vss}%
- \fi
- }%
- }%
- \def\Ytic #1,%
- {%
- \def \temp {#1}%
- \def \quit {\cr}%
- \ifx \temp\quit
- \let\next=\relax
- \setbox0 = \vbox to \plotheight {\unvbox0 \unskip}%
- \else
- \let\next=\Ytic \skip0=\padding
- \setbox1 = \hbox {\tenpoint $#1$}%
- \setbox1 = \hbox
- {%
- \smash
- {%
- \ifnum \wd1=0
- \hbox to 0pt {\hss \dash {0.67 \ticklength}}%
- \else
- \hbox to 0pt {\hss \dash \ticklength}%
- \kern \labelspacing
- \lower 0.42 \digitheight \box1%
- \fi
- }%
- }%
- \setbox0 = \vbox to \plotheight {\box1 \vskip \skip0 \unvbox0}%
- \fi
- \next
- }%
- %
- \def\xaxis #1#2%
- {%
- \global\setbox \xAxis = \vtop
- {%
- \smash {\dash \plotwidth}%
- \nointerlineskip
- \def \temp {#2}%
- \ifx \temp\empty \else \hbox to \plotwidth {\xtic #2,\cr,}\fi
- \nointerlineskip
- \def \temp {#1}%
- \ifx \temp\empty \else
- \kern 0.7 \titlespacing
- \hbox to \plotwidth {\hss #1\hss}%
- \fi
- }%
- }%
- \def\xtic #1,%
- {%
- \def \temp {#1}%
- \def \quit {\cr}%
- \ifx \temp\quit
- \let\next=\unskip
- \else
- \let\next=\xtic
- \vtop
- {%
- \setbox1 = \hbox to 0pt {\hss \tenpoint $#1$\hss}%
- \ifnum \ht1=0
- \smash
- {\hbox to 0pt
- {\hss \vrule height 0.67 \ticklength width \linewidth \hss}%
- }%
- \else
- \smash
- {\hbox to 0pt
- {\hss \vrule height \ticklength width \linewidth \hss}%
- }%
- \nointerlineskip
- \kern \labelspacing
- \box1%
- \fi
- }%
- \hskip \padding
- \fi
- \next
- }%
- %
- \def\Xaxis #1#2%
- {%
- \global\setbox \XAxis = \vbox
- {%
- \def \temp {#1}%
- \ifx \temp\empty \else
- \hbox to \plotwidth {\hss #1\hss}%
- \kern \titlespacing
- \fi
- \nointerlineskip
- \def \temp {#2}%
- \ifx \temp\empty \else \hbox to \plotwidth {\Xtic #2,\cr,}\fi
- \nointerlineskip
- \smash {\dash \plotwidth}%
- }%
- }%
- \def\Xtic #1,%
- {%
- \def \temp {#1}%
- \def \quit {\cr}%
- \ifx \temp\quit
- \let\next=\unskip
- \else
- \let\next=\Xtic
- \vbox
- {%
- \setbox1 = \hbox to 0pt {\hss \tenpoint $#1$\hss}%
- \ifnum \ht1=0
- \smash
- {\hbox to 0pt
- {\hss \vrule depth 0.67 \ticklength width \linewidth \hss}%
- }%
- \else
- \box1%
- \kern \labelspacing
- \nointerlineskip
- \smash
- {\hbox to 0pt
- {\hss \vrule depth \ticklength width \linewidth \hss}%
- }%
- \fi
- }%
- \hskip \padding
- \fi
- \next
- }%
- %
- \def\plotbox (#1,#2)%
- {%
- \global\setbox \PlotData = \hbox to 0pt
- {%
- \unhbox \PlotData
- \rlap {\kern #1\plotwidth \raise #2\plotheight \copy\PlotBox}%
- }%
- }%
- \def\plottext (#1,#2)#3%
- {%
- \setbox \PlotBox = \hbox {#3}%
- \plotbox (#1,#2)%
- }%
- \def\plotpoint (#1,#2)%
- {%
- \setbox \PlotBox = \centered.%
- \plotbox (#1,#2)%
- }%
- \def\plotsymbol (#1,#2)#3%
- {%
- \setbox \PlotBox = \centered {#3}%
- \plotbox (#1,#2)%
- }%
- \def\xrange #1]{\def\XRange {#1]}}%
- \def\yrange #1]{\def\YRange {#1]}}%
- %
- \def\makeplot #1#2#3%
- {%
- \plotwidth = #1 \plotheight = #2
- \setbox \xAxis = \hbox to \plotwidth {\hfil}%
- \setbox \XAxis = \hbox to \plotwidth {\hfil}%
- \setbox \yAxis = \vbox to \plotheight {\vfil}%
- \setbox \YAxis = \vbox to \plotheight {\vfil}%
- \setbox \PlotData = \hbox {}%
- {#3}%
- \hbox
- {%
- \box \yAxis
- \box \PlotData
- \vbox
- {%
- \box \XAxis
- \nointerlineskip \kern \plotheight \nointerlineskip
- \box \xAxis
- }%
- \box \YAxis
- }%
- }%
- %
- \def\psfile #1% --- deferred input of postscript file ---
- {%
- \global\setbox \PlotData = \hbox to 0pt
- {%
- \unhbox \PlotData \special {psfile=#1}%
- }%
- }%
- %
- \def\addPS #1% --- immediate input of postscript commands ---
- {%
- \global\setbox \PlotData = \hbox to 0pt
- {%
- \unhbox \PlotData \special {"#1}%
- }%
- }%
- %
- \def\plotdatafile #1#2% --- deferred input of data file ---
- {%
- \global\setbox \PlotData = \hbox to 0pt
- {%
- \unhbox \PlotData
- \special
- {%
- datafile="#1"
- dash="[#2]"
- xrange="\XRange"
- yrange="\YRange"
- hsize=\the\plotwidth\space
- vsize=\the\plotheight\space
- linewidth=\the\linewidth
- }%
- }%
- }%
- %
- \def\plotdata #1#2% --- immediate input of data points ---
- {%
- \global\setbox \PlotData = \hbox to 0pt
- {%
- \unhbox \PlotData
- \special
- {%
- datalist="#1"
- dash="[#2]"
- xrange="\XRange"
- yrange="\YRange"
- hsize=\the\plotwidth\space
- vsize=\the\plotheight\space
- linewidth=\the\linewidth
- }%
- }%
- }%
- %
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- %
- % Trivial Plotting Example
- %
- %\makeplot {5 in}{4.5 in}%
- % {%
- % \linewidth = 0.3 pt
- % \Xaxis {Title}{}
- % \Yaxis {\kern -5pt $Y$}{,2,4,6,8,10}
- % \yaxis {$y$}{0.0,,0.2,,0.4,,0.6,,0.8,,1.0}
- % \xaxis {$x$}{10^0 \ratio 1:2,\ratio 2:3,\ratio 3:4,\ratio 4:5,\ratio 5:6,
- % \ratio 6:7,\ratio 7:8,\ratio 8:9,\ratio 9:1,
- % 10^1 \ratio 1:2,\ratio 2:3,\ratio 3:4,\ratio 4:5,\ratio 5:6,
- % \ratio 6:7,\ratio 7:8,\ratio 8:9,\ratio 9:1,
- % 10^2 \ratio 1:1}
- % \plotsymbol (.9,.9)a
- % \plottext (.2,.4){some text}
- % \plottext (.25,.7){more text}
- % }%
- %\bye
-